from flask import Flask, render_template_string, request
from news_load import newsLoadInstance
import langchain_qwen_llm


# 列表页HTML模板
LIST_PAGE_TEMPLATE = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>新闻列表</title>
    <style>
        body { font-family: Arial, sans-serif; max-width: 1000px; margin: 0 auto; padding: 20px; }
        .category { margin: 30px 0; }
        .news-item { margin: 10px 0; padding: 10px; border: 1px solid #eee; border-radius: 4px; }
        a { color: #0066cc; text-decoration: none; }
        a:hover { text-decoration: underline; }
    </style>
</head>
<body>
    <h1>新闻列表</h1>
    {% for category, sources in categorized_news.items() %}
        <div class="category">
            <h2>{{ category }}</h2>
            {% for source, articles in sources.items() %}
                <h3>{{ source }}</h3>
                <ul>
                    {% for article in articles %}
                        <li class="news-item">
                            <a href="/detail/{{ article.id }}">{{ article.title }}</a>
                        </li>
                    {% endfor %}
                </ul>
            {% endfor %}
        </div>
    {% endfor %}
</body>
</html>
"""

# 详情页HTML模板
DETAIL_PAGE_TEMPLATE = """
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{{ title }} - 解析</title>
    <style>
        body { font-family: Arial, sans-serif; max-width: 1000px; margin: 0 auto; padding: 20px; }
        .back-link { margin-bottom: 20px; display: block; }
        .analysis { margin-top: 20px; padding: 20px; border: 1px solid #eee; border-radius: 4px; }
    </style>
</head>
<body>
    <a href="/" class="back-link">← 返回新闻列表</a>
    <h1>{{ title }}</h1>
    <p><a href="{{ url }}" target="_blank">查看原文</a></p>
    <div class="analysis">
        <h2>AI解析结果</h2>
        {{ analysis|safe }}
    </div>
</body>
</html>
"""

# 全局存储新闻数据（实际生产环境建议用数据库）
news_database = {}

def create_flask_app():
    # Flask应用初始化
    app = Flask(__name__)

    @app.route('/')
    def news_list():
        """新闻列表页"""
        return render_template_string(
            LIST_PAGE_TEMPLATE,
            categorized_news = newsLoadInstance.categorized_articles
        )

    """
    newsLoadInstance.categorized_articles属性结构示例：
    {
        '科技': {
            '新华网': [
                {
                    'title': '人工智能技术取得重大突破',
                    'url': 'https://www.xinhuanet.com/tech/ai-breakthrough',
                    'text': '近日，人工智能领域取得重要进展...',
                    'publish_date': datetime.datetime(2024, 1, 15, 10, 30),
                    'source_url': 'https://www.xinhuanet.com/',
                    'id': '科技-新华网-a1b2c3d4'
                },
                {
                    'title': '5G技术助力互联网发展',
                    'url': 'https://www.xinhuanet.com/tech/5g-internet',
                    'text': '随着5G网络的普及...',
                    'publish_date': datetime.datetime(2024, 1, 14, 14, 20),
                    'source_url': 'https://www.xinhuanet.com/',
                    'id': '科技-新华网-12345678'
                }
            ],
            '环球时报': [
                {
                    'title': '科技创新推动经济发展',
                    'url': 'https://www.globaltimes.cn/tech/innovation-economy',
                    'text': '科技创新成为经济增长新引擎...',
                    'publish_date': datetime.datetime(2024, 1, 15, 9, 15),
                    'source_url': 'https://www.globaltimes.cn/',
                    'id': '科技-环球时报-abcdef12'
                }
            ]
        },
        '金融': {
            '新华网': [
                {
                    'title': '股市迎来开门红',
                    'url': 'https://www.xinhuanet.com/finance/stock-market',
                    'text': '今日股市表现强劲...',
                    'publish_date': datetime.datetime(2024, 1, 15, 11, 0),
                    'source_url': 'https://www.xinhuanet.com/',
                    'id': '金融-新华网-98765432'
                }
            ]
        }
    }
    """

    @app.route('/detail/<news_id>')
    def news_detail(news_id):
        """新闻详情与解析页"""
        # 查找对应的新闻
        target_article = None
        # 从ID中解析分类和来源信息
        id_parts = news_id.split('-')
        if len(id_parts) == 3:
            category_name = id_parts[0]
            source_name = id_parts[1]
            # 获取后缀部分（可能包含多个'-'）
            suffix = id_parts[2]

            # 直接在对应分类和来源下查找
            if category_name in newsLoadInstance.categorized_articles:
                category_data = newsLoadInstance.categorized_articles[category_name]
                if source_name in category_data:
                    source_articles = category_data[source_name]
                    # 在该来源的文章中查找匹配后缀的ID
                    for article in source_articles:
                        article_id = article.get('id')
                        # 检查ID后缀是否匹配
                        if article_id.endswith(suffix):
                            target_article = article
                            break
        else:
            return "新闻ID不合法", 404

        if not target_article:
            return "新闻不存在", 404

        # 调用AI解析（获取字典结果）
        chain = langchain_qwen_llm.create_news_analysis_chain()
        analysis_dict = chain.invoke(target_article['text'])  # 得到字典结果

        # 提取字典中的text字段（解析结果字符串）
        analysis_text = analysis_dict.get('text', '')  # 确保即使没有text字段也不会报错

        # 转换换行符为HTML换行
        return render_template_string(
            DETAIL_PAGE_TEMPLATE,
            title=target_article['title'],
            url=target_article['url'],
            analysis=analysis_text.replace('\n', '<br>')  # 对字符串进行替换
        )

    return app